package Persistencia;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Vector;

import Clases.ProductoSeccion;
import Clases.Seccion;
import Controlador.controlador;

public class DAOSeccion
{
        private static DAOSeccion pool;
       
        private DAOSeccion(){
        }      
       
        public static DAOSeccion getInstancia()
        {
                if (pool == null)
                        pool = new DAOSeccion();
                return pool;
        }
       
        public void insert(Seccion s)
        {
                Connection con = PoolConnection.getPoolConnection().getConnection();
                try
                {
                        String senten = "INSERT INTO [TPOAPI].[dbo].[Seccion] (Nombre, Especialidad, Activo) VALUES (?,?,?)" ;
                        PreparedStatement ps = null;
                        ps = con.prepareStatement(senten);
                        ps.setString(1,s.getNombre());
                        ps.setString(2,s.getEspecialidad());
                        ps.setInt(3, s.getActivo());
                        ps.execute();                  
                        PoolConnection.getPoolConnection().realeaseConnection(con);
                }
              catch( SQLException e )
              {
                                System.out.println("Mensaje Error al Insertar Seccion: " + e.getMessage());
                                System.out.println("Stack Trace al Insertar Seccion: " + e.getStackTrace());
                               
              }
             
        }
        public void update(Seccion s)
        {
                Connection con = PoolConnection.getPoolConnection().getConnection();
                try {
                        //Preparar sentencia UPDATE en tabla destino
                        String senten = "UPDATE [TPOAPI].[dbo].[Seccion] set especialidad = ? where nombre = ?" ;
                        PreparedStatement ps = null;
                        ps = con.prepareStatement(senten);
                        ps.setString(1,s.getEspecialidad());
                        ps.setString(2,s.getNombre());
                        ps.execute();  
                        PoolConnection.getPoolConnection().realeaseConnection(con);
                }
           catch( SQLException e )
              {
                                System.out.println("Mensaje Error al Modificar Seccion: " + e.getMessage());
                                System.out.println("Stack Trace al Modificar Seccion: " + e.getStackTrace());
                                PoolConnection.getPoolConnection().realeaseConnection(con);
              }
                     
        }
        public void delete (Seccion s)
        {
                Connection con = PoolConnection.getPoolConnection().getConnection();
                try {
                        //Preparar sentencia insert en tabla destino
                        String senten = "UPDATE [TPOAPI].[dbo].[Seccion] set Activo = ? where nombre = ?" ;
                        PreparedStatement ps = null;
                        ps = con.prepareStatement(senten);
                        ps.setInt(1,s.getActivo());
                        ps.setString(2, s.getNombre());
                        ps.execute();
                        PoolConnection.getPoolConnection().realeaseConnection(con);
                }
           catch( SQLException e )
              {
                                System.out.println("Mensaje Error al Eliminar Seccion: " + e.getMessage());
                                System.out.println("Stack Trace al Eliminar Seccion: " + e.getStackTrace());
                                PoolConnection.getPoolConnection().realeaseConnection(con);                            
              }

        }
       
        public Seccion buscarSeccion(String nombre)
        {
                Connection con = PoolConnection.getPoolConnection().getConnection();
                Seccion s = null;
                Vector<ProductoSeccion> vProductoSeccion = null;
               
                //Generar sentencia SQL
                try
                {
                        //Preparar sentencia insert en tabla destino
                        String senten = "SELECT * from [TPOAPI].[dbo].[Seccion] where nombre = ?" ;
                        PreparedStatement ps = null;
                        ps = con.prepareStatement(senten);
                        ps.setString(1,nombre);
                        ResultSet result = ps.executeQuery();
                        vProductoSeccion = new Vector<ProductoSeccion>();

                        while (result.next())
                        {
                                s = new Seccion();
                                s.setNombre(result.getString("nombre"));
                                s.setEspecialidad(result.getString("especialidad"));
                                //ACA ES DONDE HAY QUE AGREGAR LOS PRODUCTO SECCION
                                vProductoSeccion =DAOProductoSeccion.getInstancia().buscarProductosXSeccion(result.getString("nombre"));
                                s.setProductosEnStock(vProductoSeccion);// ES ACA EL CAMBIO
                                s.setActivo(result.getInt("activo"));
                        }
                        PoolConnection.getPoolConnection().realeaseConnection(con);
                        return s;
                }
              catch( SQLException e )
              {
                                System.out.println("Mensaje Error al Buscar Seccion: " + e.getMessage());
                                System.out.println("Stack Trace al Buscar Seccion: " + e.getStackTrace());
                                PoolConnection.getPoolConnection().realeaseConnection(con);
              }
              return s;
        }
       
        
        public Vector<Seccion> buscarTodasSecciones()
        {
                Connection con = PoolConnection.getPoolConnection().getConnection();    
                Vector<Seccion> vec = new Vector<Seccion>();
                Seccion s = null;
               
                //Generar sentencia SQL
                try
                {
                        //Preparar sentencia insert en tabla destino
                        String senten = "SELECT * from [TPOAPI].[dbo].[Seccion]" ;
                        PreparedStatement ps = null;
                        ps = con.prepareStatement(senten);
                        ResultSet result = ps.executeQuery();
                        while(result.next())
                        {
                                s = new Seccion();
                                s.setNombre(result.getString("Nombre"));
                                s.setEspecialidad(result.getString("Especialidad"));
                                s.setActivo(result.getInt("Activo"));
                                vec.add(s);
                        }
                        PoolConnection.getPoolConnection().realeaseConnection(con);
                        return vec;
                }
              catch( SQLException e )
              {
                                System.out.println("Mensaje Error al Buscar Seccion: " + e.getMessage());
                                System.out.println("Stack Trace al Buscar Seccion: " + e.getStackTrace());
                                PoolConnection.getPoolConnection().realeaseConnection(con);
              }
              return vec;
        }
       
}
